home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / comm / term / term34Source.lha / PathPanel.c < prev    next >
C/C++ Source or Header  |  1993-07-16  |  11KB  |  400 lines

  1. /*
  2. **    PathPanel.c
  3. **
  4. **    Editing panel for path configuration
  5. **
  6. **    Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_AUPLOAD,GAD_ADOWNLOAD,GAD_TUPLOAD,GAD_TDOWNLOAD,
  13.         GAD_BUPLOAD,GAD_BDOWNLOAD,GAD_CONFIGSTORE,GAD_EDITOR,GAD_HELPFILE,
  14.  
  15.         GAD_SELECT1,GAD_SELECT2,GAD_SELECT3,GAD_SELECT4,
  16.         GAD_SELECT5,GAD_SELECT6,GAD_SELECT7,GAD_SELECT8,GAD_SELECT9,
  17.  
  18.         GAD_USE,GAD_CANCEL,GAD_DEFAULT };
  19.  
  20. STATIC STRPTR SelectText[9];
  21.  
  22. STATIC struct Gadget *
  23. CreateAllGadgets(struct Configuration *Config,struct Gadget *GadgetArray[],struct Gadget **GadgetList,BYTE *Default)
  24. {
  25.     struct Gadget        *Gadget;
  26.     struct NewGadget     NewGadget;
  27.     UWORD             Counter = 0,i;
  28.  
  29.     LocalizeString(SelectText,MSG_PATHPANEL_SELECT_DEFAULT_ASCII_UPLOAD_PATH_TXT,MSG_PATHPANEL_SELECT_HELP_FILE_TXT);
  30.  
  31.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  32.  
  33.     memset(&NewGadget,0,sizeof(struct NewGadget));
  34.  
  35.     if(Gadget = CreateContext(GadgetList))
  36.     {
  37.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_PATHPANEL_DEFAULT_ASCII_UPLOAD_PATH_GAD,MSG_PATHPANEL_HELP_TEXT_FILE_GAD));
  38.  
  39.         SZ_ResetMaxWidth();
  40.  
  41.         SZ_UpdateMaxWidth(STRING_KIND,NULL,30,NULL);
  42.  
  43.         SZ_SetWidth(SZ_ResetMaxWidth());
  44.  
  45.         NewGadget . ng_GadgetText    = LocaleString(MSG_PATHPANEL_DEFAULT_ASCII_UPLOAD_PATH_GAD);
  46.         NewGadget . ng_GadgetID        = Counter;
  47.  
  48.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  49.             SZ_Adjust,    TRUE,
  50.             SZ_AutoWidth,    TRUE,
  51.  
  52.             GTST_MaxChars,    255,
  53.             GTST_String,    Config -> PathConfig -> ASCIIUploadPath,
  54.         TAG_DONE);
  55.  
  56.         NewGadget . ng_GadgetText    = LocaleString(MSG_PATHPANEL_DEFAULT_ASCII_DOWNLOAD_PATH_GAD);
  57.         NewGadget . ng_GadgetID        = Counter;
  58.  
  59.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  60.             SZ_Adjust,    TRUE,
  61.             SZ_AutoWidth,    TRUE,
  62.  
  63.             GTST_MaxChars,    255,
  64.             GTST_String,    Config -> PathConfig -> ASCIIDownloadPath,
  65.         TAG_DONE);
  66.  
  67.         NewGadget . ng_GadgetText    = LocaleString(MSG_PATHPANEL_DEFAULT_TEXT_UPLOAD_PATH_GAD);
  68.         NewGadget . ng_GadgetID        = Counter;
  69.  
  70.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  71.             SZ_Adjust,    TRUE,
  72.             SZ_AutoWidth,    TRUE,
  73.  
  74.             GTST_MaxChars,    255,
  75.             GTST_String,    Config -> PathConfig -> TextUploadPath,
  76.         TAG_DONE);
  77.  
  78.         NewGadget . ng_GadgetText    = LocaleString(MSG_PATHPANEL_DEFAULT_TEXT_DOWNLOAD_PATH_GAD);
  79.         NewGadget . ng_GadgetID        = Counter;
  80.  
  81.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  82.             SZ_Adjust,    TRUE,
  83.             SZ_AutoWidth,    TRUE,
  84.  
  85.             GTST_MaxChars,    255,
  86.             GTST_String,    Config -> PathConfig -> TextDownloadPath,
  87.         TAG_DONE);
  88.  
  89.         NewGadget . ng_GadgetText    = LocaleString(MSG_PATHPANEL_DEFAULT_BINARY_UPLOAD_PATH_GAD);
  90.         NewGadget . ng_GadgetID        = Counter;
  91.  
  92.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  93.             SZ_Adjust,    TRUE,
  94.             SZ_AutoWidth,    TRUE,
  95.  
  96.             GTST_MaxChars,    255,
  97.             GTST_String,    Config -> PathConfig -> BinaryUploadPath,
  98.         TAG_DONE);
  99.  
  100.         NewGadget . ng_GadgetText    = LocaleString(MSG_PATHPANEL_DEFAULT_BINARY_DOWNLOAD_PATH_GAD);
  101.         NewGadget . ng_GadgetID        = Counter;
  102.  
  103.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  104.             SZ_Adjust,    TRUE,
  105.             SZ_AutoWidth,    TRUE,
  106.  
  107.             GTST_MaxChars,    255,
  108.             GTST_String,    Config -> PathConfig -> BinaryDownloadPath,
  109.         TAG_DONE);
  110.  
  111.         NewGadget . ng_GadgetText    = LocaleString(MSG_PATHPANEL_CONFIGURATION_STORAGE_DIR_GAD);
  112.         NewGadget . ng_GadgetID        = Counter;
  113.  
  114.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  115.             SZ_Adjust,    TRUE,
  116.             SZ_AutoWidth,    TRUE,
  117.             SZ_AlignExtra,    TRUE,
  118.  
  119.             GTST_MaxChars,    255,
  120.             GTST_String,    Config -> PathConfig -> DefaultStorage,
  121.         TAG_DONE);
  122.  
  123.         NewGadget . ng_GadgetText    = LocaleString(MSG_PATHPANEL_DEFAULT_TEXT_EDITOR_GAD);
  124.         NewGadget . ng_GadgetID        = Counter;
  125.  
  126.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  127.             SZ_Adjust,    TRUE,
  128.             SZ_AutoWidth,    TRUE,
  129.             SZ_AlignExtra,    TRUE,
  130.  
  131.             GTST_MaxChars,    255,
  132.             GTST_String,    Config -> PathConfig -> Editor,
  133.         TAG_DONE);
  134.  
  135.         NewGadget . ng_GadgetText    = LocaleString(MSG_PATHPANEL_HELP_TEXT_FILE_GAD);
  136.         NewGadget . ng_GadgetID        = Counter;
  137.  
  138.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  139.             SZ_Adjust,    TRUE,
  140.             SZ_AutoWidth,    TRUE,
  141.             SZ_AlignExtra,    TRUE,
  142.  
  143.             GTST_MaxChars,    255,
  144.             GTST_String,    Config -> PathConfig -> HelpFile,
  145.         TAG_DONE);
  146.  
  147.         NewGadget . ng_GadgetID        = Counter;
  148.  
  149.         GadgetArray[Counter++] = Gadget = CreateGadget(FOLDER_KIND,Gadget,&NewGadget,
  150.             SZ_Adjust,    TRUE,
  151.             SZ_AutoWidth,    TRUE,
  152.             SZ_NewColumn,    TRUE,
  153.             SZ_SmallSpace,    TRUE,
  154.             SZ_UseHeight,    SZ_Height(STRING_KIND,0,0),
  155.         TAG_DONE);
  156.  
  157.         for(i = 0 ; i < 7 ; i++)
  158.         {
  159.             NewGadget . ng_GadgetID    = Counter;
  160.  
  161.             GadgetArray[Counter++] = Gadget = CreateGadget(FOLDER_KIND,Gadget,&NewGadget,
  162.                 SZ_Adjust,    TRUE,
  163.                 SZ_AutoWidth,    TRUE,
  164.                 SZ_AlignExtra,    i >= 5,
  165.                 SZ_UseHeight,    SZ_Height(STRING_KIND,0,0),
  166.             TAG_DONE);
  167.         }
  168.  
  169.         NewGadget . ng_GadgetID    = Counter;
  170.  
  171.         GadgetArray[Counter++] = Gadget = CreateGadget(FILE_KIND,Gadget,&NewGadget,
  172.             SZ_Adjust,    TRUE,
  173.             SZ_AutoWidth,    TRUE,
  174.             SZ_AlignExtra,    TRUE,
  175.             SZ_UseHeight,    SZ_Height(STRING_KIND,0,0),
  176.         TAG_DONE);
  177.  
  178.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_USE_GAD),0,NULL);
  179.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_CANCEL_GAD),0,NULL);
  180.         SZ_UpdateMaxWidth(BUTTON_KIND,LocaleString(MSG_GLOBAL_DEFAULT_GAD),0,NULL);
  181.  
  182.         SZ_SetWidth(SZ_ResetMaxWidth());
  183.  
  184.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  185.         NewGadget . ng_GadgetID        = Counter;
  186.         NewGadget . ng_Flags        = 0;
  187.  
  188.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  189.             SZ_Adjust,    TRUE,
  190.             SZ_AutoWidth,    TRUE,
  191.             SZ_AlignExtra,    TRUE,
  192.             SZ_AlignLeft,    TRUE,
  193.             SZ_AlignBottom,    TRUE,
  194.         TAG_DONE);
  195.  
  196.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  197.         NewGadget . ng_GadgetID        = Counter;
  198.  
  199.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  200.             SZ_Adjust,    TRUE,
  201.             SZ_AutoWidth,    TRUE,
  202.             SZ_AlignRight,    TRUE,
  203.         TAG_DONE);
  204.  
  205.         if(Default)
  206.         {
  207.             NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_DEFAULT_GAD);
  208.             NewGadget . ng_GadgetID        = Counter;
  209.  
  210.             GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  211.                 SZ_Adjust,    TRUE,
  212.                 SZ_AutoWidth,    TRUE,
  213.                 SZ_AlignCentre,    TRUE,
  214.             TAG_DONE);
  215.         }
  216.     }
  217.  
  218.     return(Gadget);
  219. }
  220.  
  221. BYTE
  222. PathPanel(struct Configuration *Config,BYTE *Default)
  223. {
  224.     STATIC struct Gadget    *GadgetArray[GAD_DEFAULT + 1];
  225.     struct Gadget        *GadgetList = NULL;
  226.     struct Window        *PanelWindow;
  227.  
  228.     SaveConfig(Config,PrivateConfig);
  229.  
  230.     if(CreateAllGadgets(Config,GadgetArray,&GadgetList,Default))
  231.     {
  232.         if(PanelWindow = OpenWindowTags(NULL,
  233.             WA_Left,    GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2,
  234.             WA_Top,        GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight())    / 2,
  235.             WA_Width,    SZ_GetWindowWidth(),
  236.             WA_Height,    SZ_GetWindowHeight(),
  237.  
  238.             WA_Activate,    TRUE,
  239.             WA_DragBar,    TRUE,
  240.             WA_DepthGadget,    TRUE,
  241.             WA_RMBTrap,    TRUE,
  242.             WA_DepthGadget,    TRUE,
  243.             WA_CloseGadget,    TRUE,
  244.             WA_CustomScreen,Window -> WScreen,
  245.  
  246.             WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | IDCMP_RAWKEY | IDCMP_VANILLAKEY | BUTTONIDCMP | STRINGIDCMP,
  247.  
  248.             WA_Title,    LocaleString(MSG_PATHPANEL_PATH_PREFERENCES_TXT),
  249.         TAG_DONE))
  250.         {
  251.             struct IntuiMessage    *Massage;
  252.             ULONG             IClass,Code;
  253.             struct Gadget        *Gadget;
  254.             BYTE             Terminated = FALSE;
  255.  
  256.             GuideContext(CONTEXT_PATHS);
  257.  
  258.             PushWindow(PanelWindow);
  259.  
  260.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  261.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  262.             GT_RefreshWindow(PanelWindow,NULL);
  263.  
  264.             ActiveGadget = NULL;
  265.  
  266.             ClrSignal(SIG_BREAK);
  267.  
  268.             while(!Terminated)
  269.             {
  270.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  271.                 {
  272.                     SaveConfig(PrivateConfig,Config);
  273.  
  274.                     break;
  275.                 }
  276.  
  277.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  278.                 {
  279.                     IClass    = Massage -> Class;
  280.                     Code    = Massage -> Code;
  281.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  282.  
  283.                     GT_ReplyIMsg(Massage);
  284.  
  285.                     KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&IClass,&Code);
  286.  
  287.                     if(IClass == IDCMP_ACTIVEWINDOW && ActiveGadget)
  288.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  289.  
  290.                     if(IClass == IDCMP_GADGETDOWN)
  291.                     {
  292.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  293.                             ActiveGadget = Gadget;
  294.                     }
  295.  
  296.                     if(IClass == IDCMP_CLOSEWINDOW)
  297.                     {
  298.                         SaveConfig(PrivateConfig,Config);
  299.  
  300.                         Terminated = TRUE;
  301.                     }
  302.  
  303.                     if(IClass == IDCMP_GADGETUP)
  304.                     {
  305.                         switch(Gadget -> GadgetID)
  306.                         {
  307.                             case GAD_USE:
  308.  
  309.                                 Terminated = TRUE;
  310.  
  311.                                 strcpy(Config -> PathConfig -> ASCIIUploadPath,        SZ_GetString(GadgetArray[GAD_AUPLOAD]));
  312.                                 strcpy(Config -> PathConfig -> ASCIIDownloadPath,    SZ_GetString(GadgetArray[GAD_ADOWNLOAD]));
  313.  
  314.                                 strcpy(Config -> PathConfig -> TextUploadPath,        SZ_GetString(GadgetArray[GAD_TUPLOAD]));
  315.                                 strcpy(Config -> PathConfig -> TextDownloadPath,    SZ_GetString(GadgetArray[GAD_TDOWNLOAD]));
  316.  
  317.                                 strcpy(Config -> PathConfig -> BinaryUploadPath,    SZ_GetString(GadgetArray[GAD_BUPLOAD]));
  318.                                 strcpy(Config -> PathConfig -> BinaryDownloadPath,    SZ_GetString(GadgetArray[GAD_BDOWNLOAD]));
  319.  
  320.                                 strcpy(Config -> PathConfig -> DefaultStorage,        SZ_GetString(GadgetArray[GAD_CONFIGSTORE]));
  321.                                 strcpy(Config -> PathConfig -> Editor,            SZ_GetString(GadgetArray[GAD_EDITOR]));
  322.                                 strcpy(Config -> PathConfig -> HelpFile,        SZ_GetString(GadgetArray[GAD_HELPFILE]));
  323.  
  324.                                 break;
  325.  
  326.                             case GAD_CANCEL:
  327.  
  328.                                 Terminated = TRUE;
  329.  
  330.                                 SaveConfig(PrivateConfig,Config);
  331.  
  332.                                 break;
  333.  
  334.                             case GAD_DEFAULT:
  335.  
  336.                                 *Default    = TRUE;
  337.  
  338.                                 Terminated    = TRUE;
  339.  
  340.                                 break;
  341.  
  342.                             default:
  343.  
  344.                                         if(Gadget -> GadgetID >= GAD_SELECT1 && Gadget -> GadgetID <= GAD_SELECT9)
  345.                                 {
  346.                                     STRPTR             DummyChar;
  347.                                     struct FileRequester    *FileRequest;
  348.                                     LONG             Selection = GAD_AUPLOAD + Gadget -> GadgetID - GAD_SELECT1;
  349.  
  350.                                     BlockWindow(PanelWindow);
  351.  
  352.                                     strcpy(SharedBuffer,SZ_GetString(GadgetArray[Selection]));
  353.  
  354.                                     if(Gadget -> GadgetID < GAD_SELECT8 || !SharedBuffer[0])
  355.                                         DummyChar = "";
  356.                                     else
  357.                                     {
  358.                                         if(FilePart(SharedBuffer) == SharedBuffer)
  359.                                             SharedBuffer[0] = 0;
  360.                                         else
  361.                                         {
  362.                                             DummyChar = PathPart(SharedBuffer);
  363.  
  364.                                             *DummyChar = 0;
  365.                                         }
  366.  
  367.                                         DummyChar = FilePart(SZ_GetString(GadgetArray[Selection]));
  368.                                     }
  369.  
  370.                                     if(FileRequest = GetFile(SelectText[Selection],SharedBuffer,DummyChar,SharedBuffer,NULL,FALSE,FALSE,Gadget -> GadgetID < GAD_SELECT8,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  371.                                     {
  372.                                         GT_SetGadgetAttrs(GadgetArray[Selection],PanelWindow,NULL,
  373.                                             GTST_String,Gadget -> GadgetID < GAD_SELECT8 ? FileRequest -> rf_Dir : SharedBuffer,
  374.                                         TAG_DONE);
  375.  
  376.                                         FreeAslRequest(FileRequest);
  377.                                     }
  378.  
  379.                                     ReleaseWindow(PanelWindow);
  380.                                 }
  381.  
  382.                                 break;
  383.                         }
  384.                     }
  385.                 }
  386.             }
  387.  
  388.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  389.  
  390.             PopWindow();
  391.  
  392.             CloseWindow(PanelWindow);
  393.         }
  394.     }
  395.  
  396.     FreeGadgets(GadgetList);
  397.  
  398.     return((BYTE)memcmp(PrivateConfig -> PathConfig,Config -> PathConfig,sizeof(struct PathSettings)));
  399. }
  400.